package com.starleague.battletech.unit;

public interface HasMovement
{
    BattletechUnitMovementType getMovementType();

    boolean hasMoved();

    int getUsedMovementPoints();

    // public BattletechPoints getMovementPoints();
}

// public final MechMovementType mechMovementType;
// public final MechMovement.Points baseMovementPoints;
//

// public static final class Points
// extends MovementPoints
// {
// public static Points create(final IMechEngine i_mechEngine,
// final Tons i_mechTons) throws StarLeagueException
// {
// if (i_mechEngine == null)
// throw new StarLeagueException("MechMovement.Points: i_mechEngine is null");
//
// if (i_mechTons == null)
// throw new StarLeagueException("MechMovement.Points: i_mechTons is null");
//
// final int mpValue = (i_mechEngine.getEngineRating().getValue() * 100) / i_mechTons.asCTons();
//
// // TODO: Allow mechs to have engines that don't allow it to move?
// if (mpValue <= 0)
// throw new StarLeagueException("MechMovement.Points: Invalid calculated MP [" + mpValue + "]");
//
// return new MechMovement.Points(mpValue);
// }
//
// private Points(final int i_value)
// {
// super(i_value);
// }
// }

// // public final MovementPoints getBaseMP() { return this.baseMovementPoints; }
//
// public MechMovement(final MechMovement.TYPE i_mechMovementType,
// final IMechEngine i_mechEngine,
// final Tons i_mechTons) throws StarLeagueException
// {
// if (i_mechMovementType == null)
// throw new StarLeagueException("MechMovement: i_mechMovementType is null");
//
// this.mechMovementType = i_mechMovementType;
// this.baseMovementPoints = MechMovement.Points.create(i_mechEngine, i_mechTons);
// }

// //
// // Getters
// //
//
// public LeggedMovement.TYPE getLeggedMovementType() { return this.legged_movement_type; }
// public int getWalkMP() { return this.walk_mp; }
// public int getRunMP() { return this.run_mp; }
// // public int getSpentMP() { return this.spent_mp; }
// //public BattleTech.Movement_Legs.LEG_TYPE getLegType() { return _leg_type; }
//
// //
// // Methods
// //
//
// public LeggedMovement(
// final LeggedMovement.TYPE i_legged_movement_type,
// final int i_walk_mp)
// //final int i_run)
// {
// // super(i_movement_type);
// legged_movement_type = i_legged_movement_type;
// this.walk_mp = i_walk_mp;
// this.run_mp = (int)(i_walk_mp * 1.5);
// // this.spent_mp = 0;
// }
//
// // public boolean MoveForeward();
//
// //
// // Factory methods
// //
// // public static LeggedMovement CreateBiped(final int i_walk_mp) // run is implied
// // {
// // return new LeggedMovement(LeggedMovement.TYPE.BIPED, i_walk_mp);
// // }
// //
// // public static LeggedMovement CreateQuadruped(final int i_walk_mp) // run is implied
// // {
// // return new LeggedMovement(LeggedMovement.TYPE.QUADRUPED, i_walk_mp);
// // }
//
// //
// //
// //
//
// // private static Movement.ACTION[] allowed_actions = {
// // Movement.ACTION.MOVE_FORWARD,
// // Movement.ACTION.MOVE_BACKWARD,
// // Movement.ACTION.TURN_LEFT,
// // Movement.ACTION.TURN_RIGHT,
// // };
//
// /**
// *
// * @param i_src_hex
// * @param i_dest_hex
// * @return Movement Cost, or [-1] if impossible : TODO: needs to be a class! (for piloting rolls, etc)
// */
// // @Override
// // public battletech.MovementCost getMPCost(final HexGrid<battletech.TerrainHex> i_hex_grid,
// // final TerrainHex i_src_thex,
// // final HexDirection i_direction)
// // throws MovementException
// // {
// // if (i_hex_grid == null)
// // throw new MovementException("BattleTech.movement.Legs.getCost(): i_hex_grid is null");
// //
// // if (i_src_thex == null)
// // throw new MovementException("BattleTech.movement.Legs.getCost(): i_src_thex is null");
// //
// // if (i_direction == null)
// // throw new MovementException("BattleTech.movement.Legs.getCost(): i_direction is null");
// //
// // //
// // // Find the destination Hex
// // //
// //
// // battletech.TerrainHex dest_hex =
// // i_hex_grid.getHexInDirection(i_src_thex, i_direction);
// //
// // if (dest_hex == null)
// // return null;
// //
// // //
// // // Maximum elevation difference for a walk is 1, including water depth
// // //
// //
// // int src_elevation = i_src_thex.getElevation();
// // if (i_src_thex.getTerrain() == battletech.Terrain.WATER_DEPTH1) src_elevation -= 1;
// // if (i_src_thex.getTerrain() == battletech.Terrain.WATER_DEPTH2) src_elevation -= 2;
// //
// // int dest_elevation = dest_hex.getElevation();
// // if (dest_hex.getTerrain() == battletech.Terrain.WATER_DEPTH1) dest_elevation -= 1;
// // if (dest_hex.getTerrain() == battletech.Terrain.WATER_DEPTH2) dest_elevation -= 2;
// //
// // int diff_elevation = Math.abs(src_elevation - dest_elevation);
// // //DEBUG("Elevation [src " + src_elevation + "] [dest " + dest_elevation + "] [diff " + diff_elevation + "]");
// //
// // if (diff_elevation > 1)
// // return null;
// //
// // switch (dest_hex.getTerrain())
// // {
// // case CLEAR: return battletech.MovementCost.Create(1);
// // case PAVED: return battletech.MovementCost.Create(1);
// // case ROUGH: return battletech.MovementCost.Create(2);
// // case LIGHTFOREST: return battletech.MovementCost.Create(2);
// // case HEAVYFOREST: return battletech.MovementCost.Create(3);
// // case WATER_DEPTH1: return battletech.MovementCost.Create(2);
// // case WATER_DEPTH2: return battletech.MovementCost.Create(2);
// // // default is -1 => null
// // }
// //
// // DEBUG("BattleTech.Movement_Legs.getCost(): Unhandled Terrain = " + dest_hex.getTerrain());
// // return null;
// // }
//
// //
// // Instance Variables
// //
//
// LeggedMovement.TYPE legged_movement_type;
// int walk_mp;
// int run_mp;
// // int spent_mp;
//
// //
// //
// //
//
// // @Override
// // public Legs.SerialData Serialize(final SerialObject.SerialManager i_sobject_manager)
// // {
// // return new Legs.SerialData(i_sobject_manager, this);
// // }
// //
// // public static class SerialData extends SerialObject.SerialData
// // {
// // final Movement.TYPE _movement_type;
// // final int _walk_mp;
// // final int _run_mp;
// // final int _spent_mp; // TODO: Do something else with this?
// //
// // @Override
// // public Legs Deserialize(final SerialObject.SerialManager i_sobject_manager)// throws BattletechException
// // {
// // return (Legs)i_sobject_manager.TrackSerialObject(new Legs(this), this);
// // }
// //
// // SerialData(final SerialObject.SerialManager i_sobject_manager, final Legs i_legs)
// // {
// // super(i_sobject_manager, i_legs);
// // _movement_type = i_legs.movement_type;
// // _walk_mp = i_legs._walk_mp;
// // _run_mp = i_legs._run_mp;
// // _spent_mp = i_legs._spent_mp;
// // }
// // }
// }
